import WxRequest from './request'
import { getStorage, clearStorage } from './storage'
import { toast, modal } from './extendApi'
import { env } from './env'

const instance = new WxRequest({
  baseURL: env.baseURL,
  timeout: 15000
})

instance.interceptors.request = (config) => {
  const token = getStorage('token')
  if (token) {
    config.header['token'] = token
  }
  return config
}

instance.interceptors.response = async (response) => {
  const { isSuccess, data } = response

    if (!isSuccess) {
      toast({
        title: '网络异常请重试',
        icon: 'error'
      })

      return Promise.reject(response)
    }

    // 业务状态码 === 200，接口调用成功，服务器成功返回了数据
    // 业务状态码 === 208，没有 token 或者 token 失效，需要让用户重新进行登录
    // 业务状态码既不等于 200，也不等于 208，说明出现了其他异常，需要给用户统一进行提示
    switch (data.code) {
      case 200:
        return data
      case 208:
        const res = await modal({
          content: '鉴权失败，请重新登录',
          showCancel: false
        })

        if (res) {
          clearStorage()
          wx.navigateTo({
            url: '/pages/login/login'
          })
        }

        return Promise.reject(response)

      default:
        toast({
          title: '程序出现异常，请联系客服或稍后重试！'
        })
        return Promise.reject(response)
  }
 
}

export default instance
